//给后人写的：
//db数据库及内部集合和文本编辑代码在app内的onLaunch加载云函数下面
//因为使用云数据库必须确保云函数已经完成连接，所以直接写在云函数调用里面了
//不要使用prompt!!!!!!!下面onLaunch中定义了新的wxPrompt函数输入，格式为wxPrompt(提示1,提示2),如果不用打印提示可以选择不填参数
//下面有很多注释,你应该看得懂
App({
  globalData: {
    env: "cloud1-1g9sc01m2e85b7bb" // 务必确认这是你的真实环境ID
  },

  onLaunch() {
    // 初始化云开发
    wx.cloud.init({
      env: this.globalData.env,
      traceUser: true
    });
    // 直接添加数据到users集合
    this.addDataToUsers();
  },

  //*****************数据库声明********************//
  //以下统一在db（块级作用域数据库）标准数据库里进行
  //使用president(社长),studentUnion(学生会),manager(总管理员)集合进行权限划分
  //目前2025.6.17demo版本db包含president.studentUnion,manager,clubName,memberName,memberNumber,place,date,type集合
  //财政支出目前暂定使用新数据库
  
  //******************db数据库*********************//
  async addDataToUsers() {//针对游客权限的用户添加
    const db = wx.cloud.database();//函数内作用域db数据库声明（本来是全局作用域，但是微信云函数之前未连接所以索性直接写云函数调用下面了）
    let userInputName = "";//初始化（因为作者不知道js怎么初始化所以直接全部null好了）
    let userInputGender = "";
    let userInputAge = "";
    let userInputClass = "";
    
    // 微信小程序兼容的输入函数(因为我发现prompt函数不知道为什么在这用不了所以找ai写了这个兼容微信的输入)
    const wxPrompt = async (title, placeholder = '') => {
      return new Promise(resolve => {
        wx.showModal({
          title,
          editable: true,
          placeholderText: placeholder,
          success: res => {
            if (res.confirm) {
              resolve(res.content);
            } else {
              resolve(null);
            }
          }
        });
      });
    };

    do{
      userInputName = await wxPrompt("请输入您的姓名", "中文名(如：黄业业)");
    }while(!userInputName || userInputName.length<2 || userInputName.length>4);//姓名判断
    
    do{
      userInputClass = await wxPrompt("请输入您的班级", "如:G2-7");
      function validateInput(input) {
        // 检查输入是否为字符串且长度正确（例如 "G1-5" 是4个字符，"A2-10" 是5个字符）
        if (typeof input !== 'string' || (input.length !== 4 && input.length !== 5)) {
            return false;
        }
        // 检查第一个字符是否为 'G' 或 'A'
        const firstChar = input[0];
        if (firstChar !== 'G' && firstChar !== 'A') {
            return false;
        }
        // 检查第二个字符是否为 '1' 或 '2'
        const secondChar = input[1];
        if (secondChar !== '1' && secondChar !== '2') {
            return false;
        }
        // 检查第三个字符是否为 '-'
        const thirdChar = input[2];
        if (thirdChar !== '-') {
            return false;
        }
        // 检查第四个字符开始的数字部分（1-10的开区间，即2-9或10）
        const numberPart = input.slice(3);
        const number = parseInt(numberPart, 10);
        // 检查是否为2-10
        if (isNaN(number) || !(number >= 2 && number <= 10)) {
            return false;
        }
        // 所有检查通过，返回true
        return true;
      }
      if(validateInput(userInputClass) == true ){
        break;
      }else{
        console.log("班级输入不合法")
        wx.showToast({ title: "班级格式错误", icon: "none" });
      }
    } while(1);//do作用域内定义了函数判断是否符合班级格式（非常复杂建议调试是把这一段折叠掉）
    
    do{
      userInputGender = await wxPrompt("请输入您的性别", "男或女");
      if(userInputGender == "男" || userInputGender == "女"){
        break
      }
      wx.showToast({ title: "请输入男或女", icon: "none" });
    }while(1);//性别判断只有男和女(LGBT不要挑刺awa)
    
    do{
      userInputAge = await wxPrompt("请输入您的年龄", "13-20之间");
      if(Number(userInputAge)>13 && Number(userInputAge)<20){
        break
      }
      wx.showToast({ title: "年龄需在13-20之间", icon: "none" });
    }while(1);//年龄判断（直接if判断开区间(13,20)年龄）
    //以上input变量全部为大于while的局部变量，所以下面可以直接用

    //*******************************************注意！！************************************************//
    //这是db数据库添加代码，作者编写当前版本时还没有大量信息文本要添加，后者编辑时可以在下面的data{}内添加新文本//
    //*******************************你说你还不会数据库？还不快去学js************************************//

    db.collection('users').add({//对db数据库内users集合添加用户信息文本（在2025-6-18版本还没有引入随机id云函数所以暂时没有写）
      //对db进行添加操作
      data: {
        class: userInputClass,
        gender: userInputGender,
        name: userInputName,
        age: userInputAge,
        createdAt: db.serverDate()
      },
      //success是判断是否添加成功
      success: (res) => {
        console.log("[成功] 数据已添加", res);
        wx.showToast({ title: "添加成功", icon: "success" });
      },
      //fail是抛出错误代码
      fail: (err) => {
        console.error("[失败] 错误详情:", err);
        wx.showToast({ 
          title: `失败: ${err.errMsg || "未知错误"}`,
          icon: "none" 
        });
      }
    });
  }
});

// 启动应用
new App().onLaunch();
//demo版注册及数据库注入已经写好啦哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
//哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈红红火火恍恍惚惚红红火火恍恍惚惚
//往下写记得删这几行注释(demo25-6-18)